home *** CD-ROM | disk | FTP | other *** search
- /*
- * REXX-Skript für WRITE 3.1776 © 1989 - 1995 by Tim Teulings
- *
- * $VER: PGP.wrx 1.3 (05-Apr-95) © Tim Teulings
- *
- * History:
- *
- * 1.3 removed aother problem with the searchpath, shoud
- * work in all cases now [TT]
- * 1.2 removed some bugs and added one requester [tom]
- * 1.1. addapted to new &rexxvar-feature and fixed some bug
- * using files containing spaces (Ram Disk:) [TT]
- * 1.0 initial WRITE version [TT]
- *
- * Sorry, but it was impossible for me to contact the author...
- *
- *
- * original GoldEd-Skript by
- *
- * Autor: Lunz O. Wolfgang (Luwo)
- * <W.LUNZ@link-ba.cl.sub.de>
- *
- * VER: PGP-GoldEd-Script V0.91 ©Luwo (29.04.1994)
- *
- *
- */
-
-
- ADDRESS COMMAND 'STACK 12000' /* PGP ist ziemlich hungrig :) */
-
- lib = 'rexxreqtools.library'
- if ~show('l',lib) then call addlib(lib,0,-30,0)
-
-
- OPTIONS RESULTS /* enable return codes */
-
-
- OPTIONS FAILAT 6 /* ignore warnings */
- SIGNAL ON SYNTAX /* ensure clean exit */
- SIGNAL ON ERROR /* trap errors */
-
-
- /* INITIALISIERUNG VON WRITE */
-
- 'GETVAR "_CurrentID"'
- ID = RESULT /* GETVAR gibt den ID des aktuellen Fenster zurück, */
- /* der von den weiteren Befehlen benötigt wird. */
-
- IF ID=0 THEN DO
- MESSAGEOK (Kein Fenster aktiviert !)
- EXIT
- END
-
- OPENPORT ID /* PrivatePort des aktuellen Fensters öffnen */
- Port = RESULT
-
- IF Port="" THEN DO /* 'OPENPORT' gibt "" zurück, wenn Port nicht */
- /* geöffnet werden konnte */
-
- LOCKWINDOW ID /* Fenster locken */
- END
- ELSE DO
- INTERPRET ADDRESS Port /* PrivatePort addressieren.Alle Komandos beziehen */
- /* sich nun auf das Fenster mit diesem Port */
- END
-
- IF Port="" THEN
- WRITEPORT="WRITE"
- ELSE
- WRITEPORT=Port
-
- /* ENDE DER INITIALISIERUNG VON WRITE */
-
- /*********************************************************/
- /* Userconfigurierbare Variablen */
- /*********************************************************/
-
- USERFILE = 'T:PGP_userIDs.tmp' /* einige Standard-Variablen */
- UserPath = 'T:Users'
-
- /*********************************************************/
-
- IDstring = '0x'
- NL = '0a'x
- CLRSCR = '0c'x
- PGP = SEARCHPATH() /* den Pfad aus der PGPPATH-Variablen lesen */
-
- 'GETVAR "_FileName"'
- DEFAULTFILENAME = RESULT
-
- 'GETVAR "_marked"'
- IF RESULT=2 THEN
- BLOCKMARKIERUNG = "TRUE"
- ELSE
- BLOCKMARKIERUNG="FALSE"
-
- ORGFILENAME=DEFAULTFILENAME
-
- IF BLOCKMARKIERUNG="TRUE" then
- ORGFILENAME=DEFAULTFILENAME'.block'
-
-
-
- /* --------- Begin der Verzweigungsroutine ------------------------- */
-
-
-
- IF ARG(1)="READ_PGP" then READ_PGP() /* Läuft */
- IF ARG(1)="WRITE_PGP" then WRITE_PGP()
- IF ARG(1)="ENCODE_normal" then ENCODE_normal()
- IF ARG(1)="DECODE_normal" then DECODE_normal()
- IF ARG(1)="UNTERSCHREIBEN" then UNTERSCHREIBEN() /* Läuft */
- IF ARG(1)="KEY_aufnehmen" then KEY_aufnehmen()
- IF ARG(1)="KEY_ansehen" then KEY_ansehen()
- IF ARG(1)="KEY_editieren" then KEY_editieren()
- IF ARG(1)="KEY_entfernen" then KEY_entfernen()
- IF ARG(1)="KEY_beglaubigen" then KEY_beglaubigen()
- IF ARG(1)="KEY_anhaengen" then KEY_anhaengen()
- IF ARG(1)="KEY_generieren" then KEY_generieren()
-
-
- /* Kein verfügbarer Parameter ! */
-
-
- ADDRESS "WRITE"
- 'MESSAGEOK "PGP-Script-Fehler!\n\nKein Aktion angegeben!"'
- REALLYQUIT()
-
- /*----------- Ende der Verzweigungsroutine --------------------------*/
-
- /*-------------------------------------------------------------------*/
- READ_PGP: /* PGP analysiert den Text selbständig */
-
- CALL SAVER()
- ADDRESS COMMAND PGP || ' +FORCE "' || ORGFILENAME || '" "-o' || ORGFILENAME || '"'
- CALL LOADER()
- REALLYQUIT('k')
- end
- /*-------------------------------------------------------------------*/
-
-
-
- /*-------------------------------------------------------------------*/
- WRITE_PGP: /* Der Text wird für die entsprechenden */
- /* Empfänger codiert... */
- CALL SAVER()
-
- TITXT = 'Text verschlüsseln...'
- BTTXT = '_Ja|_Nein'
- BDTXT = 'Wollen sie den Text\nauch unterschreiben?'
- call ABFRAGE()
- if ergebnis=1 then
- signcmd=' -tea '
- else
- signcmd=' -teas '
-
- REQTITEL="Wählen sie die Empfänger.."
- empfaengerliste = GETEMPFAENGER()
- if empfaengerliste ~= '' then
- do
- ADDRESS COMMAND
- PGP SIGNCMD '+FORCE "' || ORGFILENAME || '"' EMPFAENGERLISTE
- 'c:copy >nil: "' || ORGFILENAME'.asc" "' || ORGFILENAME || '"'
- 'c:delete >nil: "'ORGFILENAME'.asc"'
- end
- CALL LOADER()
- REALLYQUIT()
- end
- /*-------------------------------------------------------------------*/
-
-
- /*-------------------------------------------------------------------*/
- ENCODE_normal: /* Der Text wird mit einem Mantra verschlüsselt */
-
- CALL SAVER()
- ADDRESS COMMAND
- PGP '-cta "' || ORGFILENAME || '"'
- 'c:copy >nil: "' || ORGFILENAME'.asc" "' || ORGFILENAME || '"'
- 'c:delete >nil: || "'ORGFILENAME'.asc"'
- CALL LOADER() /* 'OPEN AGAIN' */
- REALLYQUIT()
- end
- /*-------------------------------------------------------------------*/
-
-
- /*-------------------------------------------------------------------*/
- DECODE_normal: /* Der Text wird mit einem Mantra entschlüsselt */
-
- CALL SAVER()
- ADDRESS COMMAND
- PGP '-d +FORCE "' || ORGFILENAME || '" "-o' ORGFILENAME || '"'
- CALL LOADER()
- REALLYQUIT()
- end
- /*-------------------------------------------------------------------*/
-
- /*-------------------------------------------------------------------*/
- UNTERSCHREIBEN: /* Der Text wird mit der persönlichen Signatur */
- /* unterschrieben, und ggfs. komprimiert */
-
- TITXT = 'Text unterschreiben...'
- BTTXT = '_Ja|_Nein'
- BDTXT = 'Wollen sie den Text\nauch komprimieren?'
- call ABFRAGE()
- if ergebnis=1 then
- signcmd=' -sat +clearsig=on '
- else
- signcmd=' -sat +clearsig=off '
-
- CALL SAVER()
- ADDRESS COMMAND
- PGP SIGNCMD || '"' || ORGFILENAME || '"'
- 'C:copy >nil: "' || ORGFILENAME'.asc" "' || ORGFILENAME || '"'
- 'c:delete >nil: "' || ORGFILENAME|| '.asc"'
- CALL LOADER()
- REALLYQUIT()
- end
- /*--------------------------------------------------------------------*/
-
- /*--------------------------------------------------------------------*/
- KEY_aufnehmen:
- CALL SAVER()
- ADDRESS COMMAND
- PGP '-ka "' || ORGFILENAME || '"'
- if exists(USERFILE) then
- 'c:delete >nil: "'USERFILE || '"'
- CALL LOADER()
- REALLYQUIT('key')
- end
- /*--------------------------------------------------------------------*/
-
- /*--------------------------------------------------------------------*/
- KEY_ansehen:
- REQTITEL="Welchen Key ansehen?..."
- empfaengerliste = GETEMPFAENGER()
- if empfaengerliste ~= '' then
- do
- ADDRESS COMMAND
- PGP '-kvvc '|| empfaengerliste
- REALLYQUIT('key')
- end
- REALLYQUIT()
- end
- /*--------------------------------------------------------------------*/
-
-
- /*--------------------------------------------------------------------*/
- KEY_editieren:
- REQTITEL="Welchen Key editieren?..."
- empfaengerliste = GETEMPFAENGER()
- if empfaengerliste ~= '' then
- do
- ADDRESS COMMAND
- PGP '-ke '|| empfaengerliste
- REALLYQUIT('key')
- end
- REALLYQUIT()
- end
- /*--------------------------------------------------------------------*/
-
-
- /*--------------------------------------------------------------------*/
- KEY_entfernen:
- REQTITEL="Welchen Key entfernen?..."
- empfaengerliste = GETEMPFAENGER()
- if empfaengerliste ~= '' then
- do
- INTERPRET ADDRESS WRITEPORT
- TITXT = 'Public-keys entfernen?'
- BTTXT = '_Nein|_Ja'
- BDTXT = Namensliste
- call ABFRAGE()
- if ergebnis =0 then
- do
- ADDRESS COMMAND
- PGP '-kr ' empfaengerliste
- 'c:delete >nil: 'USERFILE' T:users ALL'
- REALLYQUIT('key')
- end
- end
- REALLYQUIT()
- end
- /*--------------------------------------------------------------------*/
-
-
- /*--------------------------------------------------------------------*/
- KEY_beglaubigen:
- REQTITEL="Welchen Key beglaubigen?..."
- empfaengerliste = GETEMPFAENGER()
- if empfaengerliste ~= '' then
- do
- ADDRESS COMMAND
- PGP '-ks '|| empfaengerliste
- REALLYQUIT('key')
- end
- REALLYQUIT()
- end
- /*--------------------------------------------------------------------*/
-
-
- /*--------------------------------------------------------------------*/
- KEY_anhaengen:
-
- REQTITEL="RADIX-64-Key einfügen..."
-
- empfaengerliste = GETEMPFAENGER()
- if empfaengerliste ~= '' then
- do
- do i = 1 to words(empfaengerliste)
- ADDRESS COMMAND
- PGP '-fkxa 'word(empfaengerliste,i) ' >t:PGPextract.tmp'i
- end
-
- INTERPRET ADDRESS WRITEPORT
- 'GETVAR "_yPos"'
- LIN = RESULT
- 'GETVAR "_xPos"'
- COL = RESULT
- BDTXT="Wo wollen Sie den(die)\nRADIX-64 (ASCII)\nPublicKey(s) einfügen?"
- TITXT="Radix-64 Public-Key insert:"
- BTTXT="_Cursor|Text_ende|_Vergiß es!"
-
- CALL ABFRAGE()
-
- if ERGEBNIS ~= 2 then
- do i = 1 to words(empfaengerliste)
-
- 'LOADBUFFER "t:PGPextract.tmp&i&" "0"'
-
- if ERGEBNIS=0 THEN
- 'GOTO 1 @CURSOR INSERTBLOCK "0"'
- if ERGEBNIS=1 THEN
- 'GOTO 1 @EOT INSERTBLOCK "0"'
-
- end
-
- GOTO LIN COL
- address command 'c:delete >nil: t:PGPextract.tmp#?'
-
- end
-
- REALLYQUIT()
- end
- /*--------------------------------------------------------------------*/
-
-
- /*--------------------------------------------------------------------*/
- KEY_generieren:
- TITXT = 'Secret-key generieren?'
- BTTXT = '_Nein|_Ja'
- BDTXT = 'Wollen Sie tatsächlich\neinen geheimen Schlüssel\ngenerieren?'
- call ABFRAGE()
- if ergebnis =0 then
- do
- ADDRESS COMMAND
- PGP '-kg '
- 'c:delete >nil: 'USERFILE
- REALLYQUIT('key')
- end
- REALLYQUIT()
- end
- /*--------------------------------------------------------------------*/
-
-
-
- /* ---------------- Auswahl der Empfaenger--------------------------- */
- GETEMPFAENGER:
-
- ADDRESS COMMAND
- drop empfaengerliste
- PGPcmd = ''
- namensliste= ''
-
- /* ist der T:user-Path schon da? */
- if ~EXISTS(UserPath) then 'C:makedir ' USERPATH
-
- /* sind die UserIds schon extrahiert? */
- if ~EXISTS(USERFILE) then call MAKEUSERLISTE()
-
- call rtfilerequest("T:Users/", , REQTITEL, ,"rtfi_flags=freqf_multiselect rt_pubscrname=WORKBENCH",empfaenger)
-
- if empfaenger == 1 then
- do
- do i=1 to empfaenger.count
- call Open('USID',empfaenger.i,"R")
- dummy = readch('USID',8)
- call Close('USID')
-
- if left(dummy,2)="0x" then
- do
- PGPcmd=PGPcmd dummy
- namensliste =namensliste right(empfaenger.i,length(empfaenger.i)-8) '|'
- end
- end
- end
-
- call rtfreefilebuffer()
- return PGPcmd
- /*--------------------------------------------------------------------*/
-
-
- /* Erstellen der aus der pubring.key-datei extrahierten User Ids */
- MAKEUSERLISTE:
- ADDRESS COMMAND PGP ' -kv >'USERFILE
- call Open('UFID',USERFILE,'R')
- do until EOF('UFID')=1
- dummy = READLN('UFID')
-
- if (UPPER(LEFT(dummy,3))="PUB")&(word(dummy,4)~='***') then
-
- do
- keyid = right(word(dummy,2),6)
- namestart= wordindex(dummy,4)
- nameend= pos('<',dummy)
- if nameend=0 then nameend=LENGTH(dummy)+2
- namelength=nameend-namestart-1
- name=substr(dummy,namestart,namelength)
- name=compress(name,':;/><')
-
- call Open('currentUser',UserPath'/'name,'W')
- call Writech('currentUser',IDSTRING||KEYID)
- call Close('currentUser')
-
- end
-
- end
- call Close('UFID')
- say Clrscr
- return
- /*--------------------------------------------------------------------*/
-
-
- /* ------------------- diverse Unterprogramme ----------------------- */
-
- SAVER: /* Speichert, je nachdem, ob die Blockmarkierung */
- /* aktiviert wurde oder nicht, den ganzen Text, */
- /* oder nur einen Ausschnitt daraus ab... */
- INTERPRET ADDRESS WRITEPORT
- if BLOCKMARKIERUNG="FALSE" then
- do
- 'SAVE _FileName'
- return 0
- end
-
- if BLOCKMARKIERUNG="TRUE" then
- do
- 'COPYBLOCK "0"'
- 'SAVEBUFFER &ORGFILENAME "0"'
- CLEARBUFFER
- return 0
- end
- end
-
- /*--------------------------------------------------------------------*/
- LOADER: /* Lädt, je nachdem, ob die Blockmarkierung aktiviert */
- /* wurde oder nicht, den ganzen Text, oder auch nur */
- /* einen Block wieder ein... */
-
- INTERPRET ADDRESS WRITEPORT
- if BLOCKMARKIERUNG="FALSE" then
- do
- 'OPEN _FileName'
- return 0
- end
-
- if BLOCKMARKIERUNG="TRUE" then
- do
- 'DELETEBLOCK'
- 'LOADBUFFER &ORGFILENAME "0"'
- 'INSERTBLOCK "0"'
- ADDRESS COMMAND 'c:delete >nil: 'ORGFILENAME
- return 0
- end
- end
-
-
- /*--------------------------------------------------------------------*/
- SEARCHPATH:
-
- ADDRESS COMMAND
- if exists('env:PGPPATH') then
- do
- call Open('binpath','ENV:PGPPATH','R')
- pgp=readln('binpath')
- call Close('binpath')
- IF right(pgp,1)~=':' THEN
- pgp=pgp || '/'
- pgp=pgp || "PGP"
-
- if ~exists(pgp) then
- pgp="PGP"
- end
-
- else
- do
- INTERPRET ADDRESS WRITEPORT
- TITXT = 'PGP-AREXX-INTERNAL-ERROR'
- BTTXT = '_OKIDOKI'
- BDTXT = "Die PGPPATH-Variable ist nicht gesetzt!\nBitte deklarieren sie diese!|\nVorläufig wird 'C:PGP' verwendet"
- call ABFRAGE()
- return 'c:pgp'
- end
-
- ADDRESS COMMAND
- return PGP
- end
-
-
- /*--------------------------------------------------------------------*/
- ABFRAGE: /* Erstellt einen Requester... */
-
- INTERPRET ADDRESS WRITEPORT
- 'ASK "&TITXT&\n\n&BDTXT&" &BTTXT'
- ERGEBNIS = RESULT
- return 0
- end
-
-
- /*--------------------------------------------------------------------*/
- REALLYQUIT:
- INTERPRET ADDRESS WRITEPORT
- arg QUITTER
-
- if QUITTER~=''then
- do
- say NL 'Bitte "Return" um weiterzumachen'
- pull QUITTER
- end
-
- 'SETVAR "_FileName" &DEFAULTFILENAME'
-
-
- /* Schließen des Ports/Unlocken des Fensters */
-
- IF Port="" THEN DO
- LOCKWINDOW 0
- END
- ELSE DO
- CLOSEPORT ID
- END
-
- EXIT
-
- /*--------------------------------------------------------------------*/
- ERROR:
- say NL 'Ein Fehler ('RC') ist in Zeile:'SIGL' aufgetreten :~('
- say '-=> [Press return]'
- pull QUITTER
-
- INTERPRET ADDRESS WRITEPORT
- 'SETVAR "_FileName" &DEFAULTFILENAME'
-
- /* Schließen des Ports/Unlocken des Fensters */
-
- IF Port="" THEN DO
- LOCKWINDOW 0
- END
- ELSE DO
- CLOSEPORT ID
- END
-
- EXIT
-
-
-
- /*--------------------------------------------------------------------*/
- SYNTAX:
- INTERPRET ADDRESS WRITEPORT
- SAY "Sorry, Syntax-error line" SIGL ":" ERRORTEXT(RC) ":-("
-
- /* Schließen des Ports/Unlocken des Fensters */
-
- IF Port="" THEN DO
- LOCKWINDOW 0
- END
- ELSE DO
- CLOSEPORT ID
- END
-
- EXIT
-
-
- /*--------------------------------------------------------------------*/
-
-